# method RULE constructor {type} {
	# #puts "New RULE $in -> $out"
	# set this(in)  ""
	# set this(out) ""	
	# if {$type == ""} {		
		# set this(type) ""
	# } else {
		# set this(type) $type
		# #set this(specialisation) [lindex $css 1]
	# }	
# }
# Generate_accessors RULE [list type in out]

# method RULE = {e} {
	# set this(type) [$e get_type]
# }


# method RULE get_css {} {
	# set previous_rules [$this(in) get_previous_rules]
	# set specialisation [lindex $this(type) 1]
	# switch -regexp -- $this(type) {
		# child_* {
			# set css [list NODE $specialisation]
			# if {$previous_rules != ""} {			
				# set ruleToApply [list [list AXE GROUP $previous_rules] {AXE CHILDREN} $css]
			# } else {
				# set ruleToApply  [list [list AXE CHILDREN] $css]
			# }
		# }
		# descendant_* {
			# set css [list NODE $specialisation]
			# if {$previous_rules != ""} {	
				# set ruleToApply [list [list AXE GROUP $previous_rules] {AXE DESCENDANTS} $css]
			# } else {
				# set ruleToApply  [list [list AXE DESCENDANTS] $css]
			# }
		# }
		# mark* - 
		# specialisation* {
			# set css [list NODE $specialisation]
			# if {$previous_rules != ""} {			
				# lappend previous_rules $css
				# set ruleToApply $previous_rules
			# } else {
				# set ruleToApply [list $css]
			# }
		# }
		# CHILDREN -
		# DESCENDANTS {
			# set css [list AXE $this(type)]
			# if {$previous_rules != ""} {												
				# set ruleToApply [list [list AXE GROUP $previous_rules] $css {NODE *}]
			# } else {
				# set ruleToApply [list $css]
			# }
		# }
		# default {
			# puts "type is incorrect $this(type)"
		# }
	# }
	# return $ruleToApply
# }

# method RULE toString {indent} {
	# set str "[this get_type] : "
	# foreach out $this(out) {
		# append str [$out toString "$indent   "]
	# }
	# return $str
# }